package 二维码;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.client.j2se.MatrixToImageWriter;

import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.HashMap;
import java.util.Map;

public class QRCodeGenerator {

    /**
     * 生成二维码
     * @param content 二维码中包含的内容，如URL或文本
     * @param width   二维码的宽度
     * @param height  二维码的高度
     * @param filePath 保存二维码图片的路径
     * @throws Exception 可能抛出的异常
     */
    public static void generateQRCode(String content, int width, int height, String filePath) throws Exception {
        // 定义二维码的参数
        Map<EncodeHintType, Object> hints = new HashMap<>();
        // 设置编码字符集
        hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
        // 设置二维码的容错级别，较高容错级别适合损坏或部分覆盖的二维码
        hints.put(EncodeHintType.ERROR_CORRECTION, com.google.zxing.qrcode.decoder.ErrorCorrectionLevel.H);

        // 生成二维码的BitMatrix（二维码的矩阵表示）
        BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints);

        // 将二维码矩阵保存为图片文件
        Path path = Paths.get(filePath);
        MatrixToImageWriter.writeToPath(bitMatrix, "PNG", path);

        System.out.println("二维码已成功生成，保存路径: " + filePath);
    }

    public static void main(String[] args) {
        try {
            // 生成二维码的内容
            String content = "https://www.example.com";
            // 设置二维码的宽度和高度
            int width = 300;
            int height = 300;
            // 保存二维码图片的路径
            String filePath = "qr_code.png";

            // 调用生成二维码方法
            generateQRCode(content, width, height, filePath);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
